#pragma once
#include <pthread.h>
#include <iostream>
#include "mutex.hpp"
using namespace mutex_module;
namespace cond_module
{
    class cond
    {
    public:
        cond()
        {
            pthread_cond_init(&_cond,nullptr);
        }
        ~cond()
        {
            pthread_cond_destroy(&_cond);
        }
        void wait(mutex& mutex2)
        {
            //需要锁的地址的原因是因为,条件变量的使用都是在临界区,如果你睡着了就要把锁解开让其他线程也可以进来执行任务.
            pthread_cond_wait(&_cond,&mutex2.mutex_get());
        }
        void wake()
        {
            pthread_cond_signal(&_cond);
        }
        void broadcast()
        {
            pthread_cond_broadcast(&_cond);
        }
    private:
    pthread_cond_t _cond;
    };
}